package controldefectos

class Sistema {

    int id
    String nombre

    static hasMany = [defectos:Defecto]

    String toString(){
        nombre
    }
    static constraints = {
       nombre(size:5..30,blank:false,unique:true)
    }

    static listarDetalles = {

        def _sistemas = Sistema.findAll()
        def resultList = []

        _sistemas.each { sistema ->
            def numSolucionados = (sistema.defectos.findAll { it.solucionado }).size()
            def numDefectos     = sistema.defectos.size()

            def _calidad = ''
            def defectosSinSolucionar = (numDefectos - numSolucionados)

            if( defectosSinSolucionar > 6 ){
                _calidad = 'BAJA'
            }else if( defectosSinSolucionar > 3){
                _calidad = 'MEDIA'
            }else{
                _calidad = 'ALTA'
            }

            resultList.add([
                    id: sistema.id,
                    nombre: sistema.nombre,
                    encontrados:numDefectos,
                    solucionados:numSolucionados,
                    calidad: _calidad
                ]
            )
        }
        
        resultList
    }

    static obtenerDetalles = { id ->

        def sistema = Sistema.find("from Sistema as s where s.id=:_id", [_id: id])
        def errores = Error.findAll()

        def numSolucionados  = (sistema.defectos.findAll { it.solucionado }).size()
        def numDefectos      = sistema.defectos.size()
        def compendioErrores = []

        errores.each { error ->
            def num = sistema.defectos.findAll { it.error == error }.size()
            if( num > 0 ){
                compendioErrores.add([ nombre: error.descripcion, porcentaje: (int)(num/numDefectos*100) ])
            }
        }


        def _calidad = ''
        def defectosSinSolucionar = (numDefectos - numSolucionados)

        if( defectosSinSolucionar > 6 ){
            _calidad = 'BAJA'
        }else if( defectosSinSolucionar > 3){
            _calidad = 'MEDIA'
        }else{
            _calidad = 'ALTA'
        }

        [id: sistema.id,
            nombre: sistema.nombre,
            encontrados:numDefectos,
            solucionados:numSolucionados,
            errores: compendioErrores,
            calidad: _calidad
        ]
    }
}
